/* @author cerimice */
package Persistencia.Definicion;

import Sistema.Configuracion;

import java.util.Date;
import java.io.Serializable;

import java.util.Collection;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.NamedQuery;
import javax.persistence.NamedQueries;

import javax.persistence.OneToOne;
import javax.persistence.FetchType;
import javax.persistence.ManyToOne;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.Temporal;

@Entity
@Table(name="ordenServicio")
@NamedQueries
    ({
    @NamedQuery(name="ordenServicio.lista", query="SELECT o FROM OrdenServicio o ORDER BY o.clave"),
    @NamedQuery(name="ordenServicio.buscarClave", query="SELECT o FROM OrdenServicio o WHERE o.clave LIKE (:valor) ORDER BY o.clave"),
    @NamedQuery(name="ordenServicio.buscarCliente", query="SELECT o FROM OrdenServicio o WHERE o.cliente IN (:valor) ORDER BY o.clave"),
    @NamedQuery(name="ordenServicio.buscarUsuario", query="SELECT o FROM OrdenServicio o WHERE o.usuario IN (:valor) ORDER BY o.clave"),
    @NamedQuery(name="ordenServicio.buscarEstado", query="SELECT o FROM OrdenServicio o WHERE o.estado IN (:valor) ORDER BY o.clave")
    })

public class OrdenServicio implements Serializable
    {
    @Id
    @Basic(optional=false)
    @Column(name="clave",nullable=false)
    private String clave;
    
    @Basic(optional=false)
    @Column(name="fechaEntrada",nullable=false)
    @Temporal(javax.persistence.TemporalType.DATE)
    private Date fechaEntrada;
    
    @Basic(optional=false)
    @Column(name="fechaSalida",nullable=true)
    @Temporal(javax.persistence.TemporalType.DATE)
    private Date fechaSalida;
    
    @Basic(optional=false)
    @Column(name="usuario",nullable=false)
    private String usuario;
    
    @Basic(optional=false)
    @Column(name="cliente",nullable=false)
    private String cliente;
    
    @Basic(optional=false)
    @Column(name="tipoServicio",nullable=false)
    private String tipoServicio;
    
    @Basic(optional=false)
    @Column(name="equipoDescripcion",nullable=true)
    private String equipoDescripcion;
    
    @Basic(optional=false)
    @Column(name="equipoMarca",nullable=false)
    private String equipoMarca;
    
    @Basic(optional=false)
    @Column(name="equipoSerie",nullable=false)
    private String equipoSerie;
    
    @Basic(optional=false)
    @Column(name="equipoObservaciones",nullable=true)
    private String equipoObservaciones;
    
    @Basic(optional=false)
    @Column(name="equipoFalla",nullable=false)
    private String equipoFalla;
    
    @Basic(optional=false)
    @Column(name="estado",nullable=false)
    private int estado;
    
    @ManyToOne(fetch=FetchType.EAGER)
    @JoinColumn(name="cliente",referencedColumnName="clave",insertable=false,updatable=false)
    private Cliente objCliente;
    
    @ManyToOne(fetch=FetchType.EAGER)
    @JoinColumn(name="usuario",referencedColumnName="clave",insertable=false,updatable=false)
    private Usuario objUsuario;
    
    @ManyToOne(fetch=FetchType.EAGER)
    @JoinColumn(name="equipoMarca",referencedColumnName="clave",insertable=false,updatable=false)
    private Marca objMarca;
    
    @ManyToOne(fetch=FetchType.EAGER)
    @JoinColumn(name="estado",referencedColumnName="clave",insertable=false,updatable=false)
    private EstadoOrdenServicio objEstado;
    
    @OneToMany(mappedBy="objOrdenServicio",cascade=CascadeType.ALL,fetch= FetchType.EAGER)
    private Collection<SeguimientoOrdenServicio> seguimiento;
    
    public OrdenServicio()
        {clave = Configuracion.getFormatoClave().format(new Date());}
    
    @Override
    public String toString()                {return this.getClave();}
    
    public String   getClave()              {return clave;}
    public Date     getFechaEntrada()       {return fechaEntrada;}
    public Date     getFechaSalida()        {return fechaSalida;}
    public String   getUsuario()            {return usuario;}
    public String   getCliente()            {return cliente;}
    public String   getTipoServicio()       {return tipoServicio;}
    public String   getEquipoDescripcion()  {return equipoDescripcion;}
    public String   getEquipoMarca()        {return equipoMarca;}
    public String   getEquipoSerie()        {return equipoSerie;}
    public String   getEquipoObservaciones(){return equipoObservaciones;}
    public String   getEquipoFalla()        {return equipoFalla;}
    public int      getEstado()            {return estado;}
    
    public void setClave(String clave)                              {this.clave = clave;}
    public void setFechaEntrada(Date fechaEntrada)                  {this.fechaEntrada = fechaEntrada;}
    public void setFechaSalida(Date fechaSalida)                    {this.fechaSalida = fechaSalida;}
    public void setUsuario(String usuario)                          {this.usuario = usuario;}
    public void setCliente(String cliente)                          {this.cliente = cliente;}
    public void setTipoServicio(String tipoServico)                 {this.tipoServicio = tipoServico;}
    public void setEquipoDescripcion(String equipoDescripcion)      {this.equipoDescripcion = equipoDescripcion;}
    public void setEquipoMarca(String equipoMarca)                  {this.equipoMarca = equipoMarca;}
    public void setEquipoSerie(String equipoSerie)                  {this.equipoSerie = equipoSerie;}
    public void setEquipoObservaciones(String equipoObservaciones)  {this.equipoObservaciones = equipoObservaciones;}
    public void setEquipoFalla(String equipoFalla)                  {this.equipoFalla = equipoFalla;}
    public void setEstado(int estado)                               {this.estado = estado;}
    
    public Cliente              getObjCliente() {return objCliente;}
    public Usuario              getObjUsuario() {return objUsuario;}
    public Marca                getObjMarca()   {return objMarca;}
    public EstadoOrdenServicio  getObjEstado()  {return objEstado;}
    public Collection<SeguimientoOrdenServicio>  getSeguimiento(){return seguimiento;}
    }
